0%

Hadoop 配置实践:从零开始搭建单机环境

Hadoop 配置实践:从零开始搭建单机环境

以下以 Apache Hadoop 2.7.x 为例,讲解单机环境的核心配置与启动流程(生产环境需配置分布式集群)。

步骤 1:核心配置文件

Hadoop 配置文件位于 $HADOOP_HOME/etc/hadoop 目录,主要包括:

1. core-site.xml(核心配置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- NameNode 节点的 URI:协议、主机、端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!-- Hadoop 临时文件存储目录(需手动创建)
如果在hdfs-site.xml中不配置NameNode节点和DataNode节点的数据存放位置时,默认放在该目录下
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/hadoop/tmp</value>
</property>
<!-- 缓冲区大小,默认 4096 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>

2. hdfs-site.xml(HDFS 配置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 数据副本数(单机测试设为 1,生产环境建议 3) -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- NameNode 元数据存储路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/data/hadoop/namenode</value>
</property>
<!-- DataNode 数据块存储路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/data/hadoop/datanode</value>
</property>
<!-- NameNode HTTP UI 端口(Hadoop3.x 为 9870,2.x 为 50070) -->
<property>
<name>dfs.namenode.http-address</name>
<value>localhost:9870</value>
</property>
<!-- SecondaryNameNode 通信端口(2.7.x 专属:50090) -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost:50090</value>
</property>
<!-- 允许 HDFS 递归删除目录(测试环境开启) -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>

3. mapred-site.xml(MapReduce 配置)

首先复制模板:cp mapred-site.xml.template mapred-site.xml,再配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0"?>
<configuration>
<!-- 配置jobTracker的主机名或者ip、端口 还可以配置TaskTracker-->
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<!-- 指定 MapReduce 运行在 YARN 上(2.7.x 核心配置) -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器地址(查看任务历史) -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<!-- 历史服务器 HTTP UI 端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
<!-- 单个 Map 任务内存限制 -->
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
<!-- 单个 Reduce 任务内存限制 -->
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1024</value>
</property>
</configuration>

4. yarn-site.xml(YARN 配置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0"?>
<configuration>
<!-- 启用 YARN 对 MapReduce 洗牌(Shuffle)的支持 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- ResourceManager 主机地址(2.7.x 默认为 localhost) -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!-- ResourceManager HTTP UI 端口(2.7.x 专属:8088,与 3.x 一致) -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8088</value>
</property>
<!-- NodeManager 分配给容器的物理内存上限 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<!-- 单个容器最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<!-- 单个容器最大内存 -->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
</configuration>

步骤 2:初始化与启动 Hadoop

  1. 初始化 NameNode(首次启动前执行):

    1
    hdfs namenode -format

    成功标志:输出 successfully formatted 信息,且在 dfs.namenode.name.dir 目录下生成元数据文件。

  2. 启动 Hadoop 集群

    1
    2
    3
    4
    # 启动 HDFS 和 YARN(需进入 $HADOOP_HOME/sbin 目录)
    # 启动 HDFS 和 YARN(2.7.x 推荐分步启动,避免依赖问题)
    ./start-dfs.sh # 启动 HDFS(NameNode、DataNode、SecondaryNameNode)
    ./start-yarn.sh # 启动 YARN(ResourceManager、NodeManager)
  3. 验证启动状态

    • 进程检查:执行 jps 命令,应看到以下进程(单机环境):

      1
      2
      3
      4
      5
      NameNode  
      DataNode
      SecondaryNameNode
      ResourceManager
      NodeManager
  • 访问 Web UI 确认服务正常:

步骤 3:HDFS 基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建目录
hdfs dfs -mkdir /test

# 上传本地文件到 HDFS
hdfs dfs -put localfile.txt /test/

# 查看 HDFS 文件
hdfs dfs -ls /test/

# 下载 HDFS 文件到本地
hdfs dfs -get /test/localfile.txt ./

# 查看文件内容
hdfs dfs -cat /test/localfile.txt

常见问题与解决

  1. 启动后缺少 DataNode 进程
    • 原因:hadoop.tmp.dir 目录权限不足或元数据损坏。
    • 解决:删除 dfs.datanode.data.dir 目录下的所有文件,重新执行 hdfs namenode -format 后重启。
  2. YARN 任务提交失败
    • 原因:内存配置不足或 mapreduce.framework.name 未设为 yarn
    • 解决:检查 mapred-site.xmlmapreduce.framework.name 是否为 yarn,并调整 yarn-site.xml 中的内存配置。
  3. 50070 端口无法访问
    • 原因:NameNode 未启动或防火墙拦截。
    • 解决:确认 NameNode 进程存在,关闭防火墙或开放 50070 端口。

欢迎关注我的其它发布渠道